package com.devil.assistant.config;

import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * AI核心组件配置中心
 *
 * <p>本配置类负责构建AI系统基础架构，包括对话记忆管理、向量存储等关键组件，
 * 为上层业务功能提供基础设施支持。</p>
 *
 * <h3>配置功能清单：</h3>
 * <ul>
 *   <li>内存型对话记录存储（开发环境适用）</li>
 *   <li>简易向量存储组件（基于Embedding模型）</li>
 * </ul>
 *
 * @author yuanxu
 * @version 1.0
 * @see InMemoryChatMemory 基于内存的对话记忆实现
 * @see SimpleVectorStore 轻量级向量存储方案
 * @since 2025/4/12
 */
@Configuration
public class AiConfiguration {

    /**
     * 对话记忆存储Bean（内存实现）
     *
     * <p>特性说明：</p>
     * <ul>
     *   <li>采用ConcurrentHashMap实现线程安全的对话存储</li>
     *   <li>默认保存最近20轮对话（可通过配置参数调整）</li>
     *   <li>重启服务后数据丢失，建议生产环境替换为持久化实现</li>
     * </ul>
     *
     * @return ChatMemory 对话记忆接口实例
     *
     * @apiNote 生产建议：替换为RedisChatMemory等持久化实现
     */
    @Bean
    public ChatMemory chatMemory() {
        return new InMemoryChatMemory();  // 开发环境快速启动方案
    }

    /**
     * 向量存储组件配置
     *
     * <p>构建流程：</p>
     * <ol>
     *   <li>注入Embedding模型实现（如OpenAIEmbeddingModel）</li>
     *   <li>初始化向量存储构建器</li>
     *   <li>配置相似度计算阈值（默认0.75）</li>
     * </ol>
     *
     * @param embeddingModel 嵌入模型（自动装配）
     * @return VectorStore 向量存储实例
     *
     * @see EmbeddingModel 向量嵌入模型接口
     * @warning 需要额外配置向量持久化策略（默认内存存储）
     */
    @Bean
    public VectorStore vectorStore(EmbeddingModel embeddingModel) {
        return SimpleVectorStore.builder(embeddingModel)
                .build();  // 可追加.withIndexFolder()配置持久化路径
    }
}
